Реализация gRPC-метода VerifyAndRotate в auth-service
Проверка черного списка в Redis, валидация сессии в PostgreSQL и атомарная ротация токенов (RTR).
NoteКраткая карточка задачи
- Репозиторий / Компонент:
auth-service(Backend контура авторизации). - Категория: Бэкенд.
- Контракт методов: gRPC
rpc VerifyAndRotate(RefreshRequest) returns (RotateResponse); - Спецификация контракта: См. Раздел: Protobuf Контракт: VerifyAndRotate
- Статус: Готово к реализации
- Предварительные условия (Prerequisites):
- Убедиться, что gRPC-сообщение зафиксировано в репозитории контрактов строго по Спецификации Protobuf и стабы обновлены.
- Инструкция по шагам:
- На Шаге 3 (Прием и валидация): Реализовать gRPC-хэндлер
VerifyAndRotate. При отсутствииrefresh_tokenвозвращать ошибкуgRPC Status: INVALID_ARGUMENT. - На Шаге 4-5 (Проверка Redis Blacklist): Выполнить команду
EXISTS "revoked:refresh:<token_hash>"в Redis. Если токен найден в блэклисте, прерывать выполнение и возвращатьgRPC Status: UNAUTHENTICATED(попытка Replay-атаки). Обернуть вызов вtry-except: при падении кэша активировать стратегию Fail-Close с возвратом логического статуса для ошибкиHTTP 503. - На Шаге 6 (Проверка PostgreSQL): Запросить статус сессии:
SELECT is_revoked, expires_at, user_id FROM user_sessions WHERE refresh_token_hash = :hash LIMIT 1;. Еслиis_revoked == true, сессия просрочена или отсутствует, возвращатьgRPC Status: UNAUTHENTICATED. - На Шаге 7 (Атомарная ротация и генерация): Извлечь метаданные пользователя (
user_id,home_group_id,account_type) из старой сессии. Сгенерировать новую пару токенов, сохранив все JWT Claims. В рамках единой SQL-транзакции пометить старыйrefresh_tokenкакis_revoked = trueи вызватьINSERT INTO user_sessionsдля новой сессии. Вернуть структуруRotateResponse.
- На Шаге 3 (Прием и валидация): Реализовать gRPC-хэндлер